#Boa:Dialog:Dialog1

import wx
import wx.grid
import utiles
import consultasBD
from decimal import Decimal
import sincronizar_tabla

ROJO = (255, 145, 145, 255)
VERDE = (145, 255, 145, 255)
AZUL = (145, 145, 255, 255)
BLANCO = (255, 255, 255, 255)
AMARILLO = (254, 248, 191, 255)
GRIS = ( 220, 220, 220, 255)
NEGRO = ( 0, 0, 0, 255)
VERDENEGRO = ( 47, 79, 79, 255)

def create(parent, idcliente, nombre, vendedora, idvendedora):
    return Dialog1(parent, idcliente, nombre, vendedora, idvendedora)

[wxID_DIALOG1, wxID_DIALOG1BUTTON3, wxID_DIALOG1BUTTON4, wxID_DIALOG1GRID1, 
 wxID_DIALOG1STATICTEXT1, wxID_DIALOG1STATICTEXT2, wxID_DIALOG1STATICTEXT3, 
 wxID_DIALOG1STATICTEXT4, wxID_DIALOG1STATICTEXT6, wxID_DIALOG1TEXTCTRL1, 
 wxID_DIALOG1TEXTCTRL2, wxID_DIALOG1TEXTCTRL6, wxID_DIALOG1TEXTCTRL7, 
 wxID_DIALOG1TEXTCTRL8, 
] = [wx.NewId() for _init_ctrls in range(14)]

class Dialog1(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_DIALOG1, name='', parent=prnt,
              pos=wx.Point(26, 109), size=wx.Size(889, 411),
              style=wx.DEFAULT_DIALOG_STYLE, title='Facturar Senias')
        self.SetClientSize(wx.Size(881, 384))

        self.staticText1 = wx.StaticText(id=wxID_DIALOG1STATICTEXT1,
              label='Cliente', name='staticText1', parent=self, pos=wx.Point(8,
              8), size=wx.Size(33, 13), style=0)

        self.textCtrl1 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL1, name='textCtrl1',
              parent=self, pos=wx.Point(88, 24), size=wx.Size(232, 21), style=0,
              value='')
        self.textCtrl1.SetEditable(False)

        self.staticText2 = wx.StaticText(id=wxID_DIALOG1STATICTEXT2,
              label='Vendedora', name='staticText2', parent=self,
              pos=wx.Point(328, 8), size=wx.Size(53, 13), style=0)

        self.textCtrl2 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL2, name='textCtrl2',
              parent=self, pos=wx.Point(360, 24), size=wx.Size(72, 21), style=0,
              value='')
        self.textCtrl2.SetEditable(False)

        self.grid1 = wx.grid.Grid(id=wxID_DIALOG1GRID1, name='grid1',
              parent=self, pos=wx.Point(8, 56), size=wx.Size(864, 280),
              style=0)
        self.grid1.Bind(wx.grid.EVT_GRID_CELL_LEFT_DCLICK, self.OnDobleClick)

        self.staticText6 = wx.StaticText(id=wxID_DIALOG1STATICTEXT6,
              label='Fecha', name='staticText6', parent=self, pos=wx.Point(792,
              8), size=wx.Size(29, 13), style=0)

        self.textCtrl6 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL6, name='textCtrl6',
              parent=self, pos=wx.Point(792, 24), size=wx.Size(72, 21), style=0,
              value='')
        self.textCtrl6.SetEditable(False)

        self.button3 = wx.Button(id=wxID_DIALOG1BUTTON3, label='Procesar',
              name='button3', parent=self, pos=wx.Point(712, 352),
              size=wx.Size(75, 23), style=0)
        self.button3.Bind(wx.EVT_BUTTON, self.OnAceptar, id=wxID_DIALOG1BUTTON3)

        self.button4 = wx.Button(id=wxID_DIALOG1BUTTON4, label='Salir',
              name='button4', parent=self, pos=wx.Point(798, 352),
              size=wx.Size(75, 23), style=0)
        self.button4.Bind(wx.EVT_BUTTON, self.OnSalir, id=wxID_DIALOG1BUTTON4)

        self.textCtrl7 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL7, name='textCtrl7',
              parent=self, pos=wx.Point(8, 24), size=wx.Size(72, 21), style=0,
              value='')
        self.textCtrl7.SetEditable(False)

        self.textCtrl8 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL8, name='textCtrl8',
              parent=self, pos=wx.Point(328, 24), size=wx.Size(32, 21), style=0,
              value='')
        self.textCtrl8.SetEditable(False)

        self.staticText3 = wx.StaticText(id=wxID_DIALOG1STATICTEXT3,
              label='DOBLE CLICK', name='staticText3', parent=self,
              pos=wx.Point(8, 352), size=wx.Size(70, 13), style=0)
        self.staticText3.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))

        self.staticText4 = wx.StaticText(id=wxID_DIALOG1STATICTEXT4,
              label='- para Facturar / para Borrar / para dejar en Pendiente',
              name='staticText4', parent=self, pos=wx.Point(80, 352),
              size=wx.Size(264, 13), style=0)

    def __init__(self, parent, idcliente, nombre, vendedora, idvendedora):
        self._init_ctrls(parent)
        idcliente = idcliente
        nombrecliente = nombre
        self.textCtrl1.SetLabel(nombrecliente)
        self.textCtrl7.SetLabel(idcliente)
        self.textCtrl2.SetLabel(vendedora)
        self.textCtrl8.SetLabel(idvendedora)
        self.textCtrl6.SetLabel(utiles.obtenerFecha("d-m-Y"))
        self.listaPTC = []
        #self.totalSenia = Decimal("0.00")
        self.crearGrillas()
        self.cargarSenias()

    def crearGrillas(self):
        #IDSenia,Fecha,Vencimiento,MontoSeniado,FormaPago,Cant,Precio,Subtotal,PTC
        #0       1     2           3            4         5    6      7        8
        #CodSussan,Descrip,Talle,Color,Usuario,Estado,id
        #9         10      11    12    13      14     15
        columnas = ['Senia','Fecha','Vencto','Monto\nSeniado','Forma\nPago','Cant.'\
                   ,'Precio','Subtotal','PTC','Codigo\nSussan','Descripcion','Talle'\
                   ,'Color','Usuario','Estado','id']
        self.grid1.CreateGrid(1,len(columnas))
        for i, col in enumerate(columnas): 
            self.grid1.SetColLabelValue(i, col)
        self.grid1.SetSelectionMode(wx.grid.Grid.wxGridSelectRows)
        self.grid1.EnableEditing(False)
        self.ajustarAnchoColumnas()
        self.grid1.Refresh()

    def ajustarAnchoColumnas(self):
        for y in xrange(self.grid1.GetNumberCols()):
            self.grid1.AutoSizeColumn(y,True)

    def OnSalir(self, event):
        self.Close()

    def buscarDatosProductos(self, ptc):
        r01 = "SELECT p1.ptc,p1.codsussan,p2.descri as descripcion,\n "
        r02 = "       p1.talle,p1.color,p3.nombre as colornombre,\n "
        r03 = "       p2.preciolt1 as precio,p5.nombre \n "
        r04 = "FROM \n "
        r05 = "  (SELECT id as ptc,codsussan,talle,color \n "
        r06 = "   FROM producto_talle_color \n "
        r07 = "   WHERE id='"+ptc+"') AS p1,\n "
        r08 = "  productos AS p2, \n "
        r09 = "  colores AS p3, \n "
        r10 = "  "
        r11 = "  proveedor AS p5 \n "
        r12 = "WHERE \n "
        r13 = "  p1.codsussan = p2.codsussan AND \n "
        r14 = "  p1.color = p3.idcolor AND \n "
        r15 = "  "
        r16 = "  "
        r17 = "  p2.proveedor = p5.idproveedor \n "
        consultaSQL = r01+r02+r03+r04+r05+r06+r07+r08+r09+r10+r11+r12+r13+r14+r15+r16+r17
        resultado = consultasBD.ordenCrudaDict(consultaSQL)
        if resultado == None or resultado == ():
            print "Producto no encontrado en esta sucursal"
            return False,()
        return True,resultado[0]

    def limpiarGrilla(self):
        self.grid1.ClearGrid()
        for item in xrange(self.grid1.GetNumberRows()):
            self.grid1.DeleteRows()
        self.grid1.AppendRows()
        
    def cargarSenias(self):
        idcliente = self.textCtrl7.GetLabel()
        nombre = self.textCtrl1.GetLabel()
        idvendedora = self.textCtrl8.GetLabel()
        r1 = "SELECT * "
        r2 = "FROM ventastienesenias vts, vendedoras v "
        r3 = "WHERE idcliente='"+idcliente+"' "
        r4 = "      AND estado =  '0' "
        r5 = "      AND vts.usuario = v.idvendedora "
        r6 = "ORDER BY vts.fecha "
        sql = r1+r2+r3+r4+r5+r6
        resultado = consultasBD.ordenCrudaDict(sql)

        for fil,item in enumerate(resultado):
            idsenia = item["idsenia"]
            id = str(item["id"])
            fecha = utiles.invertirFecha2(str(item["fecha"]))
            vencimiento = utiles.invertirFecha2(str(item["fechaVencimiento"]))
            ptc = item["ptc"]
            codsussan = item["codsussan"]
            cantidad = str(item["cantidad"])
            vunitario = str(item["vunitario"])
            total = str(item["total"])
            usuario = item["nombre"]
            montoSenia = str(item["monto"])
            formapago = item["formapago"]
            estado = "PENDIENTE"
            existen,datos = self.buscarDatosProductos(ptc)
            if not existen:
                continue
            descripcion = datos["descripcion"]
            talle = datos["talle"]
            color = datos["color"]
            
            #IDSenia,Fecha,Vencimiento,MontoSeniado,FormaPago,Cant,Precio,Subtotal,PTC
            #0       1     2           3            4         5    6      7        8
            #CodSussan,Descrip,Talle,Color,Usuario,Estado,id
            #9         10      11    12    13      14     15
            self.grid1.SetCellValue(fil,0,idsenia)
            self.grid1.SetCellValue(fil,1,fecha)
            self.grid1.SetCellValue(fil,2,vencimiento)
            self.grid1.SetCellValue(fil,3,montoSenia)
            self.grid1.SetCellValue(fil,4,formapago)
            self.grid1.SetCellValue(fil,5,cantidad)
            self.grid1.SetCellValue(fil,6,vunitario)
            self.grid1.SetCellValue(fil,7,total)
            self.grid1.SetCellValue(fil,8,ptc)
            self.grid1.SetCellValue(fil,9,codsussan)
            self.grid1.SetCellValue(fil,10,descripcion)
            self.grid1.SetCellValue(fil,11,talle)
            self.grid1.SetCellValue(fil,12,color)
            self.grid1.SetCellValue(fil,13,usuario)
            self.grid1.SetCellValue(fil,14,estado)
            self.grid1.SetCellValue(fil,15,id)

            self.grid1.SetCellAlignment(fil, 3, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fil, 4, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fil, 5, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(fil, 6, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)

            self.grid1.SetCellBackgroundColour(fil,3,GRIS)
            self.grid1.SetCellBackgroundColour(fil,5,GRIS)
            self.grid1.AppendRows()
        self.ajustarAnchoColumnas()

    def OnDobleClick(self, event):
        fil = self.grid1.GetGridCursorRow()
        col = self.grid1.GetGridCursorCol()
        #IDSenia,Fecha,Vencimiento,MontoSeniado,FormaPago,Cant,Precio,Subtotal,PTC
        #0       1     2           3            4         5    6      7        8
        #CodSussan,Descrip,Talle,Color,Usuario,Estado,id
        #9         10      11    12    13      14     15
        COLOR = BLANCO
        if self.grid1.GetCellValue(fil,14)=="PENDIENTE":
            self.grid1.SetCellValue(fil,14,"FACTURAR")
            COLOR = VERDE
        elif self.grid1.GetCellValue(fil,14)=="FACTURAR":
##            aux1 = self.grid1.GetCellValue(fil,2)
##            aux1 = utiles.invertirFecha(aux1)
##            aux1 = aux1.replace("-","")
##            aux2 = utiles.obtenerFecha("Y-m-d")
##            aux2 = aux2.replace("-","")
##            if aux1<aux2:
##                self.grid1.SetCellValue(fil,14,"BORRAR")
##                COLOR = ROJO
##            else:
##                self.grid1.SetCellValue(fil,14,"PENDIENTE")
            self.grid1.SetCellValue(fil,14,"BORRAR")
            COLOR = ROJO
        else:
            self.grid1.SetCellValue(fil,14,"PENDIENTE")
        for col in xrange(self.grid1.GetNumberCols()):
            self.grid1.SetCellBackgroundColour(fil,col,COLOR)
        if COLOR==BLANCO:
            self.grid1.SetCellBackgroundColour(fil,3,GRIS)
            self.grid1.SetCellBackgroundColour(fil,5,GRIS)

    def confirmarGrabacion(self):
        import Dialog2
        texto = "ATENCION: \n"
        texto+= "Si procede a Facturar, esto elimina la Senia de\n"
        texto+= "los productos marcados y debera facturarlos.\n"
        texto+= "Si NO HACE la factura, los productos marcados \n"
        texto+= "pasan al stock.\n"
        texto+= "DESEA PROCEDER?\n\n"
        texto+= "ACEPTAR = si                    CANCELAR = no"
        confirma = Dialog2.Dialog2(self, texto, default="no")
        try:
            confirma.ShowModal()
            if not confirma.getSeleccion(): return False
        except:
            return False
        return True

    def OnAceptar(self, event):
        print "Aceptar: graba"
        if not self.confirmarGrabacion():
            return
        #IDSenia,Fecha,Vencimiento,MontoSeniado,FormaPago,Cant,Precio,Subtotal,PTC
        #0       1     2           3            4         5    6      7        8
        #CodSussan,Descrip,Talle,Color,Usuario,Estado,id
        #9         10      11    12    13      14     15
        sucursal = utiles.getSucursalActiva()
        misSQL = []
        listaPTC = []
        #totalSenia = Decimal("0.00")
        for fil in xrange(self.grid1.GetNumberRows()):
            if self.grid1.GetCellValue(fil,14)=="FACTURAR":
                #self.mostrarProductos(fil)
                self.grid1.Refresh()
                idsenia = self.grid1.GetCellValue(fil,0)
                id = self.grid1.GetCellValue(fil,15)
                sql = "UPDATE ventastienesenias SET estado='1' WHERE id='"+id+"' "
                misSQL.append(sql)
##                totalSenia+= Decimal(self.grid1.GetCellValue(fil,6))
##                for fila in xrange(self.grid1.GetNumberRows()):
##                    if self.grid1.GetCellValue(fila,0)=="":
##                        continue
                #IDSenia,Fecha,Vencimiento,MontoSeniado,FormaPago,Cant,Precio,Subtotal,PTC
                #0       1     2           3            4         5    6      7        8
                #CodSussan,Descrip,Talle,Color,Usuario,Estado
                #9         10      11    12    13      14
                ptc = self.grid1.GetCellValue(fil,8)
                codsussan = self.grid1.GetCellValue(fil,9)
                descripcion = self.grid1.GetCellValue(fil,10)
                talle = self.grid1.GetCellValue(fil,11)
                color = self.grid1.GetCellValue(fil,12)
                cantidad = self.grid1.GetCellValue(fil,5)
                preciounitario = self.grid1.GetCellValue(fil,6)
                subtotal = self.grid1.GetCellValue(fil,7)
                datos = {}
                datos["ptc"]=ptc
                datos["codsussan"]=codsussan
                datos["descripcion"]=descripcion
                datos["talle"]=talle
                datos["color"]=color
                datos["cantidad"]=cantidad
                datos["preciounitario"]=preciounitario
                datos["subtotal"]=subtotal
                listaPTC.append(datos)

                stock = utiles.stock_sumado(ptc,sucursal,int(cantidad))
                r1 = "UPDATE stock SET stock = '%s' " % (str(stock))
                r2 = "WHERE ptc='%s' AND sucursal='%s' " % (ptc, sucursal)
                sql = r1+r2
                misSQL.append(sql)
                    
            elif self.grid1.GetCellValue(fil,14)=="BORRAR":
                #IDSenia,Fecha,Vencimiento,MontoSeniado,FormaPago,Cant,Precio,Subtotal,PTC
                #0       1     2           3            4         5    6      7        8
                #CodSussan,Descrip,Talle,Color,Usuario,Estado
                #9         10      11    12    13      14
                #self.mostrarProductos(fil)
                self.grid1.Refresh()
                idsenia = self.grid1.GetCellValue(fil,0)
                id = self.grid1.GetCellValue(fil,15)
                sql = "UPDATE ventastienesenias SET estado='2' WHERE id='"+id+"' "
                misSQL.append(sql)
                ptc = self.grid1.GetCellValue(fil,8)
                cantidad = self.grid1.GetCellValue(fil,5)
                stock = utiles.stock_sumado(ptc,sucursal,int(cantidad))
                r1 = "UPDATE stock SET stock = '%s' " % (str(stock))
                r2 = "WHERE ptc='%s' AND sucursal='%s' " % (ptc, sucursal)
                sql = r1+r2
                misSQL.append(sql)
        
        try:
            consultasBD.begin()
            for sql in misSQL:
                sincronizar_tabla.addChange(sql=sql)
                consultasBD.executaSinCommit(None, sql)
            consultasBD.commit()
            sincronizar_tabla.syncServerTables(self, ["stock"])
        except:
            utiles.mensaje(None,"Error al procesar datos")
            return
        
        self.listaPTC = listaPTC
        #self.totalSenia = totalSenia
        self.Close()
        
    def getDatosSenias(self):
        #return self.listaPTC,self.totalSenia
        return self.listaPTC
